package com.atguigu.crowd.handler;

import com.atguigu.crowd.entity.po.MemberPO;
import com.atguigu.crowd.service.api.MemberService;
import com.atguigu.crowd.util.ResultEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.*;

/**
 * @author cyb315
 * @create 2021-11-06 10:52
 */
@RestController
public class MemberProviderHandler {

    @Autowired
    private MemberService memberService;

    /**
     * 会员根据账号登录的请求映射方法
     *
     * @param loginacct
     * @return
     */
    @RequestMapping("/get/memberpo/by/login/acct/remote")
    public ResultEntity<MemberPO> getMemberPOByLoginAcctRemote(@RequestParam("loginacct") String loginacct) {

        try {
            // 1.根据表单提交的登录账号，调用service方法查询返回MemberPO对象
            MemberPO memberPO = memberService.getMemberPOByLoginAcct(loginacct);
            // 2.如果没有抛异常，那么就返回成功的结果
            return ResultEntity.successWithData(memberPO);
        } catch (Exception e) {
            e.printStackTrace();
            // 3.如果捕获到异常则返回失败的结果
            return ResultEntity.failed(e.getMessage());
        }

    }

    /**
     * 注册会员信息的保存请求映射方法
     *
     * @param memberPO
     * @return
     */
    @RequestMapping("save/member/remote")
    public ResultEntity<String> saveMember(@RequestBody MemberPO memberPO) {
        try {
            // 调用service方法执行保存数据库操作
            memberService.saveMember(memberPO);
            // 保存成功返回正确信息
            return ResultEntity.successWithoutData();
        } catch (Exception e) {

            e.printStackTrace();

            // 如果抛出的异常是DuplicateKeyException说明违反loginacct唯一约束
            if (e instanceof DuplicateKeyException) {
                // 由数据库表检查账号loginacct的唯一性
                return ResultEntity.failed("账号已被占用！");
            }

            return ResultEntity.failed("保存失败！咋回事他妈的_" + e.getMessage());
        }
    }


}
